#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <pthread.h>

const int maxcap = 5;

typedef struct BlockQueue
{
    void **q;              // 放一个队列
    int maxcap;            // 这个队列元素的上限
    int head;              // 队列头部索引
    int tail;              // 队列尾部索引
    int count;             // 当前队列中的元素数量
    pthread_mutex_t mutex; // 定义一个互斥锁来保护这个队列的安全
    pthread_cond_t pcond;  // 生产者对应的条件变量
    pthread_cond_t ccond;  // 消费者对应的条件变量
    void *(*push)(void *);
    void *(*pop)(void *);
} BlockQueue;

// 初始化阻塞队列
BlockQueue *creat_block_queue(int maxcap);

// 入队
void *push(BlockQueue *bq, int value);
// 出队
void *pop(BlockQueue *bq, int value);
